WCF (Windows Communication Foundation) সার্ভিস তৈরি করার সময়, দুটি গুরুত্বপূর্ণ কনট্র্যাক্টের ধারণা রয়েছে: Service Contract এবং Operation Contract। এই দুটি কনট্র্যাক্টের মাধ্যমে WCF সার্ভিসের কার্যক্রম, অপারেশন এবং ডেটা আদান-প্রদান সংজ্ঞায়িত হয়। এগুলো WCF সার্ভিস ডিজাইন করার মূল অংশ।
এখানে আমরা Service Contract এবং Operation Contract এর মধ্যে পার্থক্য এবং কিভাবে এগুলো তৈরি করা হয় তা বিস্তারিতভাবে আলোচনা করবো।
Service Contract
Service Contract হল WCF সার্ভিসের ইন্টারফেস যা সার্ভিসের মেথড বা অপারেশনগুলো সংজ্ঞায়িত করে। এটি এক ধরনের চুক্তি (contract) যা ক্লায়েন্ট এবং সার্ভিসের মধ্যে নির্ধারণ করে কোন অপারেশনগুলি উপলব্ধ হবে এবং সার্ভিসটি কিভাবে কাজ করবে। এটি [ServiceContract] অ্যাট্রিবিউটের মাধ্যমে চিহ্নিত করা হয়।
Service Contract তৈরি করার উদাহরণ:
- Service Contract ইন্টারফেস তৈরি করুন এবং তার মধ্যে অপারেশন সংজ্ঞায়িত করুন:
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetMessage(string name);
[OperationContract]
int AddNumbers(int a, int b);
}
- [ServiceContract] অ্যাট্রিবিউট সার্ভিসের ইন্টারফেসকে চিহ্নিত করে।
- [OperationContract] অ্যাট্রিবিউট প্রতিটি মেথডকে চিহ্নিত করে যা সার্ভিসের অংশ হিসেবে কাজ করবে।
এখানে, IMyService ইন্টারফেস দুটি অপারেশন সংজ্ঞায়িত করেছে:
GetMessage: একটি স্ট্রিং ইনপুট নেয় এবং একটি স্ট্রিং আউটপুট দেয়।AddNumbers: দুটি পূর্ণসংখ্যা নেয় এবং তাদের যোগফল প্রদান করে।
Operation Contract
Operation Contract হলো সার্ভিসের একটি মেথড যা Service Contract ইন্টারফেসে সংজ্ঞায়িত হয় এবং [OperationContract] অ্যাট্রিবিউট দিয়ে চিহ্নিত করা হয়। এটি নির্ধারণ করে সার্ভিস কী কাজ করবে এবং সার্ভিসের অপারেশনগুলির বিস্তারিত বর্ণনা দেয়।
Operation Contract তৈরি করার উদাহরণ:
- Service Contract ইন্টারফেসে যেসব মেথডগুলো Operation Contract হিসেবে সংজ্ঞায়িত করা হয়, সেগুলো সার্ভিসে উপলব্ধ হয়।
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetMessage(string name);
[OperationContract]
int AddNumbers(int a, int b);
}
এখানে, GetMessage এবং AddNumbers দুটি অপারেশন সংজ্ঞায়িত করা হয়েছে এবং এগুলোর সাথে [OperationContract] অ্যাট্রিবিউট ব্যবহার করা হয়েছে।
Service Implementation (অপারেশন বাস্তবায়ন):
যেহেতু অপারেশনগুলি ইন্টারফেসে সংজ্ঞায়িত করা হয়েছে, এখন আমাদের এগুলো বাস্তবায়ন করতে হবে। সার্ভিস ইমপ্লিমেন্টেশনে মেথডগুলো বাস্তবায়ন করা হবে।
public class MyService : IMyService
{
public string GetMessage(string name)
{
return $"Hello, {name}! Welcome to WCF Service.";
}
public int AddNumbers(int a, int b)
{
return a + b;
}
}
এখানে, MyService ক্লাসটি IMyService ইন্টারফেসটি ইমপ্লিমেন্ট করেছে এবং এর মধ্যে GetMessage এবং AddNumbers মেথডগুলোর কার্যকরী বাস্তবায়ন প্রদান করেছে।
Service Contract এবং Operation Contract এর পার্থক্য
| বৈশিষ্ট্য | Service Contract | Operation Contract |
|---|---|---|
| ব্যাখ্যা | সার্ভিসের অপারেশন এবং কার্যকারিতা সংজ্ঞায়িত করে। | সার্ভিসের একটি নির্দিষ্ট মেথডের কার্যকারিতা সংজ্ঞায়িত করে। |
| অ্যাট্রিবিউট | [ServiceContract] | [OperationContract] |
| কিভাবে ব্যবহৃত হয় | সার্ভিসের ইন্টারফেসে ব্যবহৃত হয়। | সার্ভিসের মেথডে ব্যবহৃত হয়। |
| কাজের দায়িত্ব | সার্ভিসে কী কী অপারেশন থাকবে তা নির্ধারণ করা। | সার্ভিসের প্রতিটি অপারেশন কীভাবে কাজ করবে তা নির্ধারণ করা। |
সার্ভিস কনফিগারেশন
WCF সার্ভিস কনফিগারেশন সাধারণত web.config বা app.config ফাইলে করা হয়। এখানে binding, address, এবং contract কনফিগার করা হয়।
<system.serviceModel>
<services>
<service name="MyFirstWCFService.MyService">
<endpoint address="" binding="basicHttpBinding" contract="MyFirstWCFService.IMyService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/MyService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
- binding: যোগাযোগের প্রোটোকল (যেমন
basicHttpBinding)। - contract: সার্ভিসের চুক্তি (ইন্টারফেস), যা
IMyService। - address: সার্ভিসের ঠিকানা।
সারাংশ
- Service Contract WCF সার্ভিসের মেথড বা অপারেশন সংজ্ঞায়িত করে এবং এটি [ServiceContract] অ্যাট্রিবিউট দ্বারা চিহ্নিত হয়।
- Operation Contract প্রতিটি মেথডের কার্যকারিতা সংজ্ঞায়িত করে এবং এটি [OperationContract] অ্যাট্রিবিউট দ্বারা চিহ্নিত হয়।
- এগুলি একত্রে WCF সার্ভিসের কাঠামো তৈরি করতে সাহায্য করে, যেখানে সার্ভিসের সকল অপারেশন নির্দিষ্ট করা হয় এবং কার্যকরী করা হয়।
এভাবে, WCF সার্ভিসের Service Contract এবং Operation Contract ব্যবহারের মাধ্যমে, আপনি সার্ভিসের কার্যকলাপ এবং ক্লায়েন্ট-সার্ভিস যোগাযোগ সহজভাবে সংজ্ঞায়িত করতে পারবেন।
WCF (Windows Communication Foundation) একটি সার্ভিস-ভিত্তিক প্রযুক্তি, যা ডিস্ট্রিবিউটেড সিস্টেম এবং ওয়েব সার্ভিস তৈরি করার জন্য ব্যবহৃত হয়। Service Contract এবং Operation Contract WCF-এর দুটি অত্যন্ত গুরুত্বপূর্ণ উপাদান, যা সার্ভিসের কার্যকলাপ এবং অপারেশনগুলিকে সংজ্ঞায়িত করে। এখানে, আমরা তাদের মৌলিক ধারণা এবং ব্যবহার ব্যাখ্যা করবো।
Service Contract
Service Contract হলো WCF এর একটি ইন্টারফেস বা চুক্তি যা সার্ভিসের কার্যকলাপ (functionalities) সংজ্ঞায়িত করে। এটি সার্ভিসের অপারেশনগুলোকে চিহ্নিত করে এবং নির্ধারণ করে কোন অপারেশনগুলি ক্লায়েন্টদের জন্য উপলব্ধ হবে।
Service Contract এর গুরুত্ব
- সার্ভিসের কার্যকলাপ সংজ্ঞায়িত করে: সার্ভিসের কাজ কী হবে, এবং সার্ভিস ক্লায়েন্টের সাথে কীভাবে যোগাযোগ করবে তা Service Contract দ্বারা নির্ধারণ করা হয়।
- WCF সার্ভিসের মৌলিক কাঠামো: এটি একটি ইন্টারফেস হিসেবে কাজ করে এবং সার্ভিসের প্রোগ্রামিং ইন্টারফেস (API) তৈরি করে।
- ডিস্ট্রিবিউটেড সিস্টেমে কমিউনিকেশন সহজ করে: Service Contract এর মাধ্যমে ডেভেলপাররা নির্দিষ্ট মেথডগুলো সংজ্ঞায়িত করতে পারেন, যেগুলো ক্লায়েন্ট থেকে সার্ভিসে কল করা যাবে।
Service Contract তৈরির উদাহরণ
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetMessage(string name);
}
এখানে:
- [ServiceContract] অ্যাট্রিবিউট ইন্টারফেসটিকে সার্ভিস কন্ট্র্যাক্ট হিসেবে চিহ্নিত করে।
- [OperationContract] অ্যাট্রিবিউট মেথডকে সার্ভিস অপারেশন হিসেবে চিহ্নিত করে, যা ক্লায়েন্ট দ্বারা কল করা যেতে পারে।
Operation Contract
Operation Contract হলো Service Contract এর অংশ, যা একটি নির্দিষ্ট অপারেশন বা মেথডকে চিহ্নিত করে, যা সার্ভিসে উপলব্ধ। এটি সেই ফাংশনালিটি বা মেথডকে সংজ্ঞায়িত করে, যা সার্ভিসের মাধ্যমে ক্লায়েন্টকে প্রদান করা হবে।
Operation Contract এর গুরুত্ব
- প্রতিটি অপারেশন বা ফাংশন সংজ্ঞায়িত করে: এটি নির্ধারণ করে যে, সার্ভিস কোন মেথড বা অপারেশন প্রদান করবে এবং সেই অপারেশন কিভাবে ব্যবহার করা যাবে।
- ক্লায়েন্টের জন্য উপলব্ধ অপারেশন: [OperationContract] অ্যাট্রিবিউট ব্যবহার করে WCF সার্ভিসে ক্লায়েন্টদের জন্য উপলব্ধ অপারেশনগুলো চিহ্নিত করা হয়।
- ডেটা প্রক্রিয়াকরণ সহজ করে: Operation Contract এর মাধ্যমে সার্ভিসের অপারেশনগুলো ডেটা প্রক্রিয়া বা ম্যানিপুলেশন করতে সক্ষম হয়।
Operation Contract তৈরির উদাহরণ
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetMessage(string name);
}
এখানে:
- GetMessage মেথডটি একটি অপারেশন হিসেবে সংজ্ঞায়িত হয়েছে।
- [OperationContract] অ্যাট্রিবিউটটি মেথডকে সার্ভিস অপারেশন হিসেবে চিহ্নিত করেছে, যা ক্লায়েন্ট থেকে কল করা যেতে পারে।
Service Contract এবং Operation Contract এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Service Contract | Operation Contract |
|---|---|---|
| ব্যবহার | সার্ভিসের কাজ বা কার্যকলাপ সংজ্ঞায়িত করে। | সার্ভিসের নির্দিষ্ট অপারেশন বা মেথড সংজ্ঞায়িত করে। |
| অ্যাট্রিবিউট | [ServiceContract] | [OperationContract] |
| কাজ | সার্ভিসের ফাংশনালিটি এবং যোগাযোগের পদ্ধতি সংজ্ঞায়িত করে। | সার্ভিসে কি অপারেশন বা মেথড থাকবে তা নির্ধারণ করে। |
| উদাহরণ | public interface IMyService | string GetMessage(string name); |
| সংজ্ঞায়ন | সার্ভিসের সমস্ত অপারেশনগুলির জন্য একটি ইন্টারফেস তৈরি করা হয়। | সার্ভিসের মধ্যে একটি নির্দিষ্ট অপারেশন বা মেথডের বিস্তারিত সংজ্ঞা প্রদান করা হয়। |
সারাংশ
- Service Contract হলো সার্ভিসের একটি ইন্টারফেস যা সার্ভিসের কার্যকলাপ সংজ্ঞায়িত করে এবং ক্লায়েন্টের জন্য সার্ভিসের সাথে যোগাযোগের পদ্ধতি তৈরি করে।
- Operation Contract হলো একটি নির্দিষ্ট সার্ভিস অপারেশন যা Service Contract এর অংশ হিসেবে থাকে এবং এটি সার্ভিসের মেথড বা ফাংশন সংজ্ঞায়িত করে, যা ক্লায়েন্ট কল করতে পারে।
- Service Contract এবং Operation Contract একসাথে WCF সার্ভিসের মৌলিক কাঠামো তৈরি করে এবং ডিস্ট্রিবিউটেড সিস্টেমে ক্লায়েন্ট ও সার্ভিসের মধ্যে কার্যকরী যোগাযোগ নিশ্চিত করে।
WCF (Windows Communication Foundation) সার্ভিস তৈরি করার সময় Contract Attribute এবং Method Signature গুরুত্বপূর্ণ ভূমিকা পালন করে। Contract Attribute সার্ভিসের কার্যকলাপ সংজ্ঞায়িত করে এবং Method Signature নির্ধারণ করে যে, সার্ভিসের কোন মেথডগুলি ক্লায়েন্টের জন্য উপলব্ধ থাকবে এবং তাদের প্যারামিটার কেমন হবে।
Contract Attribute
Contract Attribute হল WCF-এর একটি অত্যন্ত গুরুত্বপূর্ণ অ্যাট্রিবিউট যা একটি ইন্টারফেস বা ক্লাসকে Service Contract বা Data Contract হিসেবে চিহ্নিত করে। WCF এ দুটি প্রধান কন্ট্র্যাক্ট থাকে:
- Service Contract: সার্ভিসের অপারেশন বা মেথডগুলিকে সংজ্ঞায়িত করে।
- Data Contract: ডেটা ট্রান্সফারের জন্য ব্যবহৃত ডেটা কাঠামো (যেমন ক্লাস বা অবজেক্ট) সংজ্ঞায়িত করে।
Service Contract Attribute
Service Contract অ্যাট্রিবিউট একটি ইন্টারফেস বা ক্লাসকে চিহ্নিত করে যা WCF সার্ভিসের অপারেশনগুলো ধারণ করবে।
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetMessage(string name);
}
- [ServiceContract] অ্যাট্রিবিউট ইন্টারফেস বা ক্লাসটিকে সার্ভিস কন্ট্র্যাক্ট হিসেবে চিহ্নিত করে।
- [OperationContract] অ্যাট্রিবিউট প্রতিটি মেথডকে সার্ভিস অপারেশন হিসেবে চিহ্নিত করে।
Data Contract Attribute
Data Contract অ্যাট্রিবিউট ক্লাস বা স্ট্রাকচারগুলিকে চিহ্নিত করে যেগুলো WCF সার্ভিসের মাধ্যমে ডেটা আদান-প্রদান করবে।
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
- [DataContract] অ্যাট্রিবিউট ক্লাসটিকে একটি ডেটা কন্ট্র্যাক্ট হিসেবে চিহ্নিত করে।
- [DataMember] অ্যাট্রিবিউট ক্লাসের প্রোপার্টি বা ফিল্ডগুলোকে চিহ্নিত করে যেগুলো ডেটা আদান-প্রদান করা হবে।
Method Signature
Method Signature হল WCF সার্ভিসের ইন্টারফেসে বা কনট্র্যাক্টে প্রতিটি মেথডের সঠিক স্বাক্ষর, যা ক্লায়েন্টদের সঙ্গে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হবে। Method Signature সাধারণত [OperationContract] অ্যাট্রিবিউটের মাধ্যমে সার্ভিসে সংজ্ঞায়িত মেথডের আর্গুমেন্ট এবং রিটার্ন টাইপ নির্ধারণ করে।
Method Signature এর উদাহরণ:
- Service Contract এর মধ্যে Method Signature
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetMessage(string name);
[OperationContract]
int AddNumbers(int num1, int num2);
}
- GetMessage মেথডের সিগনেচার: এটি একটি string প্যারামিটার (name) নেয় এবং একটি string রিটার্ন করে।
- AddNumbers মেথডের সিগনেচার: এটি দুটি int প্যারামিটার নেয় এবং একটি int রিটার্ন করে।
- Method Signature with Data Contract
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetPersonInfo(Person person);
}
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
- GetPersonInfo মেথডের সিগনেচার: এটি Person ডেটা কন্ট্র্যাক্টের অবজেক্ট নেয় এবং একটি string রিটার্ন করে।
- Person ক্লাসটি DataContract হিসেবে চিহ্নিত এবং এর প্রোপার্টিগুলি DataMember অ্যাট্রিবিউটের মাধ্যমে চিহ্নিত করা হয়েছে।
Contract Attribute এবং Method Signature এর সম্পর্ক
- Service Contract অ্যাট্রিবিউট সার্ভিসের Operation Contract অ্যাট্রিবিউট দ্বারা চিহ্নিত মেথডগুলির স্বাক্ষর (signature) নির্ধারণ করে, যা ক্লায়েন্ট অ্যাপ্লিকেশন থেকে এক্সেস করা যাবে।
- Data Contract অ্যাট্রিবিউট ক্লাসগুলোর মধ্যে ডেটা আদান-প্রদানের জন্য ব্যবহৃত ফরম্যাট নির্ধারণ করে।
- Method Signature এবং Operation Contract: OperationContract মেথডের স্বাক্ষর এবং এর প্যারামিটার ও রিটার্ন টাইপ চিহ্নিত করে, যাতে ক্লায়েন্ট সার্ভিসটি ব্যবহার করতে পারে।
সারাংশ
- Contract Attribute (যেমন ServiceContract এবং DataContract) WCF সার্ভিসের কার্যকলাপ এবং ডেটা কাঠামো সংজ্ঞায়িত করে।
- Method Signature হল সেই সিগনেচার যা মেথডের প্যারামিটার এবং রিটার্ন টাইপ নির্ধারণ করে, যা সার্ভিসের অপারেশনগুলোর জন্য ব্যবহৃত হয়।
- OperationContract অ্যাট্রিবিউট মেথডগুলির জন্য ব্যবহৃত হয় যা WCF সার্ভিসে ক্লায়েন্ট এক্সেস করতে পারে।
WCF (Windows Communication Foundation) এ বিভিন্ন ধরনের যোগাযোগ প্যাটার্ন রয়েছে, যার মাধ্যমে সার্ভিস এবং ক্লায়েন্টের মধ্যে বিভিন্নভাবে মেসেজ আদান-প্রদান করা সম্ভব। এখানে আমরা One-way, Request-Response, এবং Duplex Communication প্যাটার্নগুলোর কথা বলব। এই প্যাটার্নগুলো WCF সার্ভিসের কার্যক্রম এবং ক্লায়েন্টের সঙ্গে যোগাযোগের কৌশল নির্ধারণ করে।
১. One-way Communication
One-way Communication হল এমন একটি যোগাযোগ প্যাটার্ন যেখানে শুধুমাত্র সার্ভিস থেকে ক্লায়েন্ট বা একটি অ্যাপ্লিকেশন থেকে অন্য অ্যাপ্লিকেশনে একমুখী তথ্য প্রেরণ করা হয়। এই প্যাটার্নে, সার্ভিসটি ক্লায়েন্টের কোনো প্রতিক্রিয়া (response) প্রত্যাশা করে না।
বৈশিষ্ট্য:
- সার্ভিস থেকে ক্লায়েন্টে: একমুখী ডেটা পাঠানো হয়, এবং ক্লায়েন্ট কোনো ডেটা বা প্রতিক্রিয়া ফিরিয়ে দেয় না।
- অ্যাসিঙ্ক্রোনাস: এটি সাধারণত অ্যাসিঙ্ক্রোনাস যোগাযোগ হিসেবে কাজ করে, যেখানে সার্ভিস কল করা হয় এবং কোনো ফলাফল বা প্রতিক্রিয়া প্রত্যাশিত হয় না।
ব্যবহারের ক্ষেত্রে:
- লগিং, নোটিফিকেশন সিস্টেম: যেমন, সার্ভিস শুধুমাত্র একটি লগ বা নোটিফিকেশন পাঠায় এবং ক্লায়েন্ট থেকে কোনো উত্তর আশা করে না।
উদাহরণ:
একটি One-way অপারেশন WCF ইন্টারফেসে এইভাবে সংজ্ঞায়িত করা যেতে পারে:
[ServiceContract]
public interface IMyService
{
[OperationContract(IsOneWay = true)]
void Notify(string message);
}
এখানে IsOneWay = true দ্বারা, Notify মেথডটি শুধুমাত্র একমুখী যোগাযোগকে নির্দেশ করছে। ক্লায়েন্ট সার্ভিসে কল করবে, কিন্তু সার্ভিস থেকে কোনো প্রতিক্রিয়া পাবে না।
২. Request-Response Communication
Request-Response Communication হল সবচেয়ে সাধারণ যোগাযোগ প্যাটার্ন, যেখানে ক্লায়েন্ট সার্ভিসে একটি রিকোয়েস্ট পাঠায় এবং সার্ভিস সেই রিকোয়েস্টের জন্য একটি রেসপন্স প্রদান করে। এটি সিঙ্ক্রোনাস পদ্ধতির যোগাযোগ, যেখানে ক্লায়েন্ট সার্ভিস থেকে উত্তর বা ফলাফল প্রত্যাশা করে।
বৈশিষ্ট্য:
- সিঙ্ক্রোনাস: ক্লায়েন্ট একটি রিকোয়েস্ট পাঠায় এবং সার্ভিসের রেসপন্স বা ফলাফল পাওয়া না পর্যন্ত অপেক্ষা করে।
- প্রতিটি রিকোয়েস্টের জন্য একটি রেসপন্স: ক্লায়েন্টের কাছে সার্ভিসের রেসপন্স প্রত্যাশিত থাকে।
- স্ট্যান্ডার্ড HTTP এবং SOAP ব্যবহৃত হয়।
ব্যবহারের ক্ষেত্রে:
- ব্যাংকিং, শপিং সিস্টেম: যেমন, সার্ভিসে ক্লায়েন্ট কোন তথ্য প্রেরণ করে এবং সার্ভিসের ফলাফল বা আউটপুট ফেরত পায়।
উদাহরণ:
Request-Response প্যাটার্নের জন্য একটি সাধারণ OperationContract:
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetMessage(string name);
}
এখানে, সার্ভিসটি ক্লায়েন্টের পাঠানো name ইনপুটের ভিত্তিতে একটি রেসপন্স ফেরত দেবে।
৩. Duplex Communication
Duplex Communication হল এমন একটি যোগাযোগ প্যাটার্ন যেখানে সার্ভিস এবং ক্লায়েন্ট উভয়ই একে অপরকে মেসেজ পাঠাতে পারে। এটি two-way communication হিসাবে কাজ করে, যেখানে সার্ভিস ক্লায়েন্টের কাছে রেসপন্স পাঠানোর পাশাপাশি, ক্লায়েন্টও সার্ভিসের কাছে মেসেজ পাঠাতে পারে।
বৈশিষ্ট্য:
- দ্বিমুখী (two-way) যোগাযোগ: ক্লায়েন্ট এবং সার্ভিস উভয়ই একে অপরকে মেসেজ পাঠাতে পারে।
- Asynchronous Communication: এটি অ্যাসিঙ্ক্রোনাস কাজ করে, এবং এটি একটি callback বা listener এর মাধ্যমে কাজ করে।
- Real-time updates: এটি বাস্তব সময়ে ক্লায়েন্ট এবং সার্ভিসের মধ্যে তথ্য বিনিময় করতে সক্ষম।
ব্যবহারের ক্ষেত্রে:
- চ্যাট অ্যাপ্লিকেশন, রিয়েল-টাইম নোটিফিকেশন সিস্টেম: যেখানে ক্লায়েন্ট এবং সার্ভিস উভয়ে একে অপরকে মেসেজ পাঠাতে সক্ষম।
উদাহরণ:
Duplex Communication সন্নিবেশ করা যায় যখন callback contract ব্যবহার করা হয়:
[ServiceContract]
public interface IMyService
{
[OperationContract]
void StartProcessing(ICallback callback);
}
public interface ICallback
{
[OperationContract]
void NotifyCompletion(string message);
}
এখানে, ICallback ইন্টারফেসের মাধ্যমে সার্ভিস এবং ক্লায়েন্টের মধ্যে দু-তরফে যোগাযোগ স্থাপন করা হচ্ছে। ক্লায়েন্ট NotifyCompletion মেথডের মাধ্যমে সার্ভিসে একটি নোটিফিকেশন পাঠাতে পারে।
সারাংশ
| Communication Type | Description | Use Case | Response Expected |
|---|---|---|---|
| One-way Communication | সার্ভিস থেকে ক্লায়েন্টে একমুখী তথ্য পাঠানো। | নোটিফিকেশন, লগিং, অ্যালার্ট সিস্টেম। | কোনো প্রতিক্রিয়া নেই। |
| Request-Response Communication | ক্লায়েন্ট সার্ভিসে রিকোয়েস্ট পাঠায় এবং রেসপন্স পায়। | ব্যাংকিং সিস্টেম, পণ্য তথ্য সংগ্রহ। | সার্ভিস থেকে রেসপন্স প্রত্যাশিত। |
| Duplex Communication | ক্লায়েন্ট এবং সার্ভিস উভয়ই একে অপরকে মেসেজ পাঠাতে পারে। | চ্যাট সিস্টেম, রিয়েল-টাইম নোটিফিকেশন সিস্টেম। | সার্ভিস এবং ক্লায়েন্ট উভয়ে রেসপন্স। |
কখন কোন প্যাটার্ন ব্যবহার করবেন?
- One-way: যখন শুধুমাত্র একমুখী তথ্য পাঠানোর প্রয়োজন, এবং ক্লায়েন্ট সার্ভিসের প্রতিক্রিয়া বা ফলাফল প্রত্যাশা করে না।
- Request-Response: যখন ক্লায়েন্ট সার্ভিসে রিকোয়েস্ট পাঠিয়ে একটি ফলাফল বা প্রতিক্রিয়া প্রত্যাশা করে।
- Duplex: যখন ক্লায়েন্ট এবং সার্ভিসের মধ্যে একে অপরকে রিয়েল-টাইমে মেসেজ পাঠানোর প্রয়োজন হয়, যেমন চ্যাট বা নোটিফিকেশন সিস্টেমে।
এই প্যাটার্নগুলো ব্যবহার করে আপনি আপনার WCF সার্ভিসের কার্যক্রম কাস্টমাইজ করতে পারেন এবং ক্লায়েন্ট ও সার্ভিসের মধ্যে কার্যকরী যোগাযোগ স্থাপন করতে পারেন।
WCF (Windows Communication Foundation) সার্ভিসে Contract Inheritance এবং Multiple Contracts ব্যবহার করা দুটি গুরুত্বপূর্ণ ধারণা, যা সঠিকভাবে কাস্টম সার্ভিস ডিজাইন করার জন্য খুবই উপকারী। এই দুটি কনসেপ্ট সার্ভিসের Service Contract এবং Operation Contract গঠনকে আরও নমনীয় ও শক্তিশালী করতে সাহায্য করে। নিচে এগুলোর ব্যাখ্যা দেওয়া হলো।
Contract Inheritance
Contract Inheritance হল একটি প্রক্রিয়া, যেখানে একটি কনট্র্যাক্ট অন্য একটি কনট্র্যাক্ট থেকে ইনহেরিট (উত্তরাধিকার) করে। WCF-এ, যখন একটি কনট্র্যাক্ট (ইন্টারফেস) একটি অন্য কনট্র্যাক্ট থেকে ইনহেরিট করে, তখন এটি তার সমস্ত অপারেশন এবং কার্যকলাপকে উত্তরাধিকারসূত্রে পায়। এর মাধ্যমে আপনি বিদ্যমান কনট্র্যাক্টে নতুন মেথড যোগ করতে পারেন, বা পূর্ববর্তী কনট্র্যাক্টের কার্যকারিতা ধরে রেখে নতুন কনট্র্যাক্ট তৈরি করতে পারেন।
Contract Inheritance এর উদাহরণ
ধরা যাক, আপনার একটি IBaseService নামক কনট্র্যাক্ট আছে, এবং আপনি এটি থেকে IExtendedService নামক নতুন কনট্র্যাক্ট তৈরি করতে চান।
// Base Contract
[ServiceContract]
public interface IBaseService
{
[OperationContract]
string GetMessage(string name);
}
// Extended Contract inheriting from IBaseService
[ServiceContract]
public interface IExtendedService : IBaseService
{
[OperationContract]
string GetAdditionalInfo(int id);
}
এখানে, IExtendedService কনট্র্যাক্টটি IBaseService কনট্র্যাক্ট থেকে ইনহেরিট করেছে, ফলে GetMessage মেথডটি এখানে উপলব্ধ থাকবে, এবং সাথে GetAdditionalInfo মেথডও যোগ করা হয়েছে।
সার্ভিস ইমপ্লিমেন্টেশন
public class MyService : IExtendedService
{
public string GetMessage(string name)
{
return $"Hello, {name}";
}
public string GetAdditionalInfo(int id)
{
return $"Additional info for ID: {id}";
}
}
Multiple Contracts ব্যবহার
Multiple Contracts ব্যবহার করার মাধ্যমে একটি সার্ভিস একাধিক কনট্র্যাক্টের সমর্থন প্রদান করতে পারে। এর মানে হলো, একটি WCF সার্ভিস একাধিক ইন্টারফেসের মাধ্যমে বিভিন্ন কার্যকলাপ সম্পাদন করতে সক্ষম হবে। এটি বিশেষভাবে উপকারী যখন আপনি একাধিক ধরনের ক্লায়েন্ট বা অপারেশন একত্রিত করতে চান।
Multiple Contracts এর উদাহরণ
ধরা যাক, আপনি একটি সার্ভিস তৈরি করছেন, যা দুটি ভিন্ন কাজ করবে: একটি ডেটা প্রদান করবে এবং অন্যটি ইমেইল পাঠাবে। এজন্য দুটি আলাদা কনট্র্যাক্ট তৈরি করা হবে।
// Data contract
[ServiceContract]
public interface IDataService
{
[OperationContract]
string GetData(int value);
}
// Email contract
[ServiceContract]
public interface IEmailService
{
[OperationContract]
string SendEmail(string to, string subject, string body);
}
এখন, এই দুটি কনট্র্যাক্টের ইমপ্লিমেন্টেশন করতে হবে একটি সার্ভিসে।
public class MyService : IDataService, IEmailService
{
public string GetData(int value)
{
return $"Data value is {value}";
}
public string SendEmail(string to, string subject, string body)
{
return $"Email sent to {to} with subject: {subject}";
}
}
WCF সার্ভিস কনফিগারেশন
এখন, web.config ফাইলে দুটি ভিন্ন কনট্র্যাক্টের জন্য দুটি endpoint কনফিগার করতে হবে।
<system.serviceModel>
<services>
<service name="MyService">
<endpoint address="dataService" binding="basicHttpBinding" contract="IDataService" />
<endpoint address="emailService" binding="basicHttpBinding" contract="IEmailService" />
</service>
</services>
</system.serviceModel>
এখানে দুটি আলাদা endpoint নির্ধারণ করা হয়েছে: একটি IDataService কনট্র্যাক্টের জন্য এবং আরেকটি IEmailService কনট্র্যাক্টের জন্য।
Contract Inheritance এবং Multiple Contracts এর সুবিধা
- Contract Inheritance এর মাধ্যমে আপনি বিদ্যমান কনট্র্যাক্ট থেকে নতুন কনট্র্যাক্ট তৈরি করতে পারেন, যা পুনরায় ব্যবহারের সুযোগ তৈরি করে এবং কোডের পুনরাবৃত্তি কমায়।
- Multiple Contracts ব্যবহার করলে আপনি একই সার্ভিসে একাধিক কার্যকলাপ সংজ্ঞায়িত করতে পারবেন, যা আপনার সার্ভিসকে আরও নমনীয় এবং শক্তিশালী করে তোলে।
সারাংশ
- Contract Inheritance WCF সার্ভিসের একটি কনট্র্যাক্টকে অন্য একটি কনট্র্যাক্ট থেকে উত্তরাধিকার দেওয়ার প্রক্রিয়া।
- Multiple Contracts আপনাকে একাধিক কনট্র্যাক্ট সমর্থন করার সুযোগ দেয়, যার মাধ্যমে এক সার্ভিসে একাধিক কাজ সম্পাদন করা সম্ভব হয়।
এই ধারণাগুলো WCF সার্ভিস ডিজাইন করতে আরও ফ্লেক্সিবিলিটি এবং পুনঃব্যবহারযোগ্যতা এনে দেয়।
Read more